﻿using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using PH5_2004A.Shopping.DAL;
using PH5_2004A.Shopping.DTO;
using PH5_2004A.Shopping.IService;

namespace PH5_2004A.Shopping.API.Controllers
{
    /// <summary>
    /// 会员管理控制器
    /// </summary>
    [Route("member")]
    [ApiController]
    public class MemberController : ControllerBase
    {
        IMemberService _service;
        PH52004ADbContext _context;
        Microsoft.AspNetCore.Hosting.IWebHostEnvironment _environment;
        public MemberController(IMemberService service, PH52004ADbContext context,
            Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment)
        {
            _service = service;
            _context = context;
            _environment = environment;
        }

        /*
         * 会员登录
         * 用户登录是POST提交
         * 用户登录需要提交哪些信息？需要提交用户名和密码
         * 所以单独定义了一个输入dto用来作为入参：MemberLoginInputDto
         * **/
        /// <summary>
        /// 会员登录
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult Login(MemberLoginInputDto dto)
        {
            //定义一个统一返回值实例
            ResponseResultDto resultDto = new ResponseResultDto();


            //入参验证（用户名或密码有一个是空的，则提示：参数无效）
            if (string.IsNullOrEmpty(dto.UserName) || string.IsNullOrEmpty(dto.Password))
            {
                resultDto.Code = Shared.RespsonseResultStatuCodeEnum.ParamInvailde;
                resultDto.Message = Shared.RespsonseResultStatuCodeEnum.ParamInvailde.ToString();
            }
            else
            //调用服务层的方法
            {
                //一些处理业务（调用服务层的方法）
                var d = _service.Login(dto);
                resultDto.Data = d;
            }

            //返回结果
            return Ok(resultDto);
        }

        /// <summary>
        /// 上传头像
        /// </summary>
        /// <returns>返回的是头像图片路径的字符串</returns>
        [HttpPost("headimg")]
        public IActionResult UploadHeadImg()
        {
            //定义一个统一返回值实例
            ResponseResultDto resultDto = new ResponseResultDto();

            #region 文件上传

            //1、要先获取这个前台vue组件选的图片
            var files = Request.Form.Files;
            var file = files[0]; //头像只是一张图片

            //2、把这张图片保存到本地（获取这张图上保存的路径）
            var wwwroot = _environment.WebRootPath;
            var path = $"{wwwroot}/{file.FileName}";

            //3、保存这张图片
            using (var stream = System.IO.File.Create(path))
            {
                file.CopyTo(stream);
            }
            #endregion

            resultDto.Data = file.Name;

            //返回结果
            return Ok(resultDto);
        }

        //API方法的模板
        private IActionResult 方法模板(MemberLoginInputDto dto)
        {
            //定义一个统一返回值实例
            ResponseResultDto resultDto = new ResponseResultDto();

            //入参验证（用户名或密码有一个是空的，则提示：参数无效）
            if (string.IsNullOrEmpty(dto.UserName) || string.IsNullOrEmpty(dto.Password))
            {
                resultDto.Code = Shared.RespsonseResultStatuCodeEnum.ParamInvailde;
                resultDto.Message = Shared.RespsonseResultStatuCodeEnum.ParamInvailde.ToString();
            }
            else
            //调用服务层的方法
            {
                //一些处理业务（调用服务层的方法）
                //var d =  _service.Login(dto);
                //resultDto.Data = d;
            }

            //返回结果
            return Ok(resultDto);
        }

    }
}
